package com.caochenlei.observer.custom;

import java.util.ArrayList;
import java.util.List;

public class Subject {
    private boolean changed = false;
    private List<Observer> observers = new ArrayList<>();

    //添加一个观察者
    public void addObserver(Observer o) {
        observers.add(o);
    }

    //删除一个观察者
    public void deleteObserver(Observer o) {
        observers.remove(o);
    }

    //通知所有观察者
    public void notifyObservers(Object arg) {
        //如果数据没改变，那就不需要通知
        if (changed == false) {
            return;
        }
        //通知所有的观察者来进行数据更新
        for (Observer observer : observers) {
            ((Observer) observer).update(this, arg);
        }
        //更新完成以后，清除当前主题状态
        this.clearChanged();
    }

    public void setChanged() {
        changed = true;
    }

    public void clearChanged() {
        changed = false;
    }
}
